function initFormsDatepickers() {
  if ($('input.backgroundCalendar').length) {
    $('input.backgroundCalendar').datepicker({
  		//minDate : new Date(),
  		//maxDate : new Date(dateEnd),
  		//defaultDate: new Date(dateActual),
  		numberOfMonths: 1,
  		changeMonth: true,
  		changeYear: true,
  		showButtonPanel: true,
  		closeText: 'Закрыть',
  		currentText: 'Сегодня'
    });
  }
};

// Метод осуществляет вход в систему через AJAX
function ajaxSignIn() {
  var login = $('#ajaxLogin').val();
  var password = $('#ajaxPassword').val();
  var noSave = $('#ajaxNoSave').attr('checked') ? 1 : 0;
	$.post(W_AJAX + "auth/sign_in/", {
		login: login,
		password: password,
		noSave: noSave
		}, function(obj){
		  if (obj.result == "error") alert(obj.error);
			else window.location.reload();
		},
		'json'
	);

};

// Метод выводит окошко для незарегистрированных пользователей
function showWindowForUnreg(el) {
  var html = '<div>' +
    '<p><b>Sign in or register for this action</b></p>' +
    '<form onsubmit="ajaxSignIn();return false;" class="standard ajaxSignIn">' +
      '<div class="separate"></div>' +
      '<div class="separate"></div>' +
      '<p>Username or Email address' +
      '<input type="text" class="standardText" id="ajaxLogin" /></p>' +
      '<p>Password <span style="font-size:12px;">(<a href="' + W_ABSPATH + 'auth/recovery/" title="Get new password" target="_blank" class="Opens new tab/window">Forgot your password?</a>)</span>' +
      '<input type="password" class="standardText" value="" id="ajaxPassword" style="padding-bottom:5px;margin-bottom:0;" /></p>' +
      '<p><input type="checkbox" id="ajaxNoSave" />&nbsp; <strong>Do NOT</strong> save me</p>' +
      '<div class="separate"></div>' +
      '<p style="overflow:hidden">' +
      '<div style="float:right;margin-right:10px"><img src="' + W_IMAGES + 'icons/register.gif" class="relTop7px" alt="">&nbsp;&nbsp;<a href="' + W_ABSPATH + 'auth/sign_up/" target="_blank" title="Opens new tab/window">Register</a></div>' +
      '<input type="image" value="Sign in" src="' + W_IMAGES + 'button/forms/sign_in_green.gif"  /></p>' +
    '</form>' +
  '</div>';
  $(el).popUpBox({
   'width': 347,
   'html': html
  });
};


function View () {}

/*
Пересчёт чётности/нечётности строк (важно при удалении/добавлении элементов)
*/
View.recalcTableOdds = function(tableSelector) {
  $(tableSelector + ' tr').each(function(i) {
    $(this).attr("class", (i % 2) ? 'odd' : 'even');
  });
}

// Замена гида в банере
function changeBannerGuide() {
	left = 0;
	$('#guidesBannerIn').animate({'left': (left - $('.userMainPage').width()) + 'px'}, 500, function() {
		$('#guidesBannerIn').css('left', left);
		$('#guidesBannerIn .userMainPage:first').clone().appendTo('#guidesBannerIn');
		$('#guidesBannerIn .userMainPage:first').remove();
	});
}

// Прокручиваем гида в банере назад
function reverseBannerGuide() {
	left = 0;
	$('#guidesBannerIn').css('left', left - $('.userMainPage').width() + 'px');
	$('#guidesBannerIn .userMainPage:last').clone().prependTo('#guidesBannerIn');
	$('#guidesBannerIn .userMainPage:last').remove();
	$('#guidesBannerIn').animate({'left': left}, 500);
}


// Метод сохраненяет состояния блока (свернуто/развернуто) и сворачивает или разворачивает сам блок
function setMenuUserVariable(variableName, el, type) {
	if (!type) var type = '';
	if ($(el).attr('src') == W_IMAGES + 'icons/border_menu/show' + type + '.gif') {
		setUserVariable(variableName, 1);
		showBlock(el, type);
	}
	else {
		setUserVariable(variableName, 0);
		hideBlock(el, type);
	}
}

// Метод сохраненяет состояния блока (свернуто/развернуто)
function setUserVariable(variableName, variableValue) {
	$.post(W_AJAX + "user/setUserVariable", {
		variableName: variableName,
		variableValue: variableValue
		}, function(obj){
			if (obj.result == "error") alert(obj.error);
		},
		'json'
	);
}

function hideBlock(el, type) {
	$(el).attr('src', W_IMAGES + 'icons/border_menu/show' + type + '.gif');
	$(el).parent().next().slideUp('normal');
}

function showBlock(el, type) {
	$(el).attr('src', W_IMAGES + 'icons/border_menu/hide' + type + '.gif');
	$(el).parent().next().slideDown('normal');
	if ($(el).parent().next().find("textarea[attrW='notW']").size()) $(el).parent().next().find("textarea[attrW='notW']").attr("class", "wysiwygComment");
	review.wysiwygForComment();
}

// Убираем лишние поля фильтра для красивой строки GET
function updateFilter() {
//  if (empty($('.as-original input').val())) {alert(1);return false;} //не субитим если ввод ещё не завершён
	$('#as-values-User_Guide_language').attr('name', 'Language');
	if ($('#as-values-User_Guide_language').val())
	$('#as-values-User_Guide_language').val(trim($('#as-values-User_Guide_language').val(),','));
	$('#as-values-User_Guide_country').attr('name', 'Country');
	$('#as-values-User_Guide_country').val(trim($('#as-values-User_Guide_country').val(),','));
	$('#as-values-User_Guide_city').attr('name', 'City');
	$('#as-values-User_Guide_city').val(trim($('#as-values-User_Guide_city').val(),','));
	$('.as-hiddens-User_Guide_language').remove();
	$('.as-hiddens-User_Guide_country').remove();
	$('.as-hiddens-User_Guide_city').remove();
	if ($('#locationFilterLanguage').css('display') == 'none') $('#as-values-User_Guide_language').remove();
};



function deleteUser(id) {
	if (confirm("Уверены, что хотите удалить этого пользователя?")){
	  $.post(W_AJAX + 'user/delete',
	    {
	      ID_user: id
	    },
	    function(responseText) {
	   	  if (navigator.userAgent.indexOf ("Opera") != -1) var arrInfo = eval('(' + responseText + ')');
	    	else var arrInfo = JSON.parse(responseText);
	      if (arrInfo['result'] == 'OK') {
					location.href = W_ABSPATH;
	      }
	      else alert(arrInfo['err_text']);
			}
		);
	}
}



function setFont(id) {
	var size = 10;
	$('#string').css('font-size', size);
	while ($('#string').width() + 20 < $('#string').parent().width()) {
		size = $('#string').css2('font-size') + 1;
		$('#string').css('font-size', ($('#string').css2('font-size') + 1) + 'px');
	}
	$('#' + id).css('font-size', size);
}

/*
function ajaxFileUpload(id) {
	$("#loading").ajaxStart(function(){
		$(this).show();
	})
	.ajaxComplete(function(){
		$(this).hide();
	});
	$.ajaxFileUpload({
			url: W_ABSPATH + 'auth/upload',
			secureuri: false,
			fileElementId: id,
			dataType: 'json',
			success: function (data, status) {
				if(typeof(data.error) != 'undefined')
				{
					if(data.error != '') {
						alert(data.error);
					}
					else	{
						$('#' + id + '_file').val(data.pic_file);
						$('#uploadedImage').empty();
						$('#uploadedImage').append('<div class="borderUserAvatarSmall"><img src="' + W_IMAGES + 'essence/user/tmp/s_' + data.pic_file + '" alt="" class="borderUserAvatarSmall"></div>');
						var strDeleteLink = '<a href="javascript:emptyAvatar(\'' + data.pic_file + '\');">delete</a>';
						$('#linkToDeleteUploadImage').html(strDeleteLink);
					}
				}
			},
			error: function (data, status, e)	{
				alert(e);
			}
	});
	return false;
}

function emptyAvatar(avatar) {
  $.post(W_AJAX + 'auth/delete_avatar',
    {
      avatar: avatar
    },
    function(responseText) {
   	  if (navigator.userAgent.indexOf ("Opera") != -1) var arrInfo = eval('(' + responseText + ')');
    	else var arrInfo = JSON.parse(responseText);
      if (arrInfo['result'] == 'OK') {
				$('#uploadedImage').empty();
				$('#linkToDeleteUploadImage').empty();
				$('#upload_widget_value_1').empty();
      }
      else alert(arrInfo['err_text']);
		}
	);
}
*/
function submitCallRequestForm (objForm) {
  var jqForm = $(objForm);
  var emExceptions = new Exception_Multiline(objForm);
//  if (!$("#Call_name").val().length) {
//    emExceptions.add({selector: "#Call_name", text: "You have not specified your name"});
//  }
//  var expr = /^\d{2}.\d{2}.\d{4}$/;
//  if (!$("#Call_date").val().match(expr)) {
//    emExceptions.add({selector: "#Call_date", text: "You have not specified the date you are ready to talk with our representative"});
//  }
//  if (parseInt($("#Call_time").val()) < 0 || parseInt($("#Call_time").val()) > 2) {
//    emExceptions.add({selector: "#Call_time", text: "Wrong time format"});
//  }
//  var expr = /^\d{3} \(\d{3}\) \d{3}-\d{4}$/;
//  if (!$("#Call_phone").val().match(expr)) {
//    emExceptions.add({selector: "#Call_phone", text: "Wrong phone format"});
//  }
//  var expr = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/;
//  if (!$("#Call_e_mail").val().match(expr)) {
//    emExceptions.add({selector: "#Call_e_mail", text: "Wrong E-mail format"});
//  }
//  if (emExceptions.exist()) { //если есть ошибки
//    emExceptions.throwAll();
//  } else { //если ошибок нет, отправляем данные формы
      var objLink = $("#sbmtCallRequest");
      if ($(objLink).attr("pressed") == "pressed") return false;
      $(objLink).attr("pressed", "pressed"); //Добавляем защиту от повторных нажатий
    	$.ajax({
      	type: "POST",
        url: W_AJAX + 'common/call_request/',
        data: jqForm.serialize(),
        success: function(responseText){
        	if (navigator.userAgent.indexOf ("Opera") != -1) var arrInfo = eval('(' + responseText + ')');
    	    else var arrInfo = JSON.parse(responseText);
    	    if (arrInfo['result'] == 'ok') {
    	      alert('The request has been sent successfully!');
    	      $("#resetCallRequest").click(); //очищаем форму
    	      emExceptions.reset(); //удаляем старые исключения
    	      tb_remove(); //закрываем thickbox
    	    }
    	    else {
        		$(objLink).attr('pressed', 'no');
        		emExceptions.addMany(arrInfo['exceptions']).throwAll(); //добавляем новые и выбрасываем исключения
        		$("#Call_kaptcha_change").click(); //меняем каптчу
    		    $("#Call_kaptcha").val(""); //очищаем поле каптчи
        	}
        }
      });
      $(objLink).removeAttr("pressed");
  //}
  return false;
}

function submitQuickRequestForm (objForm) {
  var jqForm = $(objForm);
  var emExceptions = new Exception_Multiline(objForm);
  var objLink = $("#sbmtQuickRequest");
  if ($(objLink).attr("pressed") == "pressed") return false;
  $(objLink).attr("pressed", "pressed"); //Добавляем защиту от повторных нажатий
	$.ajax({
  	type: "POST",
    url: W_AJAX + 'common/quick_request/',
    data: jqForm.serialize(),
    success: function(responseText){
    	if (navigator.userAgent.indexOf ("Opera") != -1) var arrInfo = eval('(' + responseText + ')');
	    else var arrInfo = JSON.parse(responseText);
	    if (arrInfo['result'] == 'ok') {
	      alert('The request has been sent successfully!');
	      $("#resetQuickRequest").click(); //очищаем форму
	      emExceptions.reset(); //удаляем старые исключени
	      tb_remove(); //закрываем thickbox
	    }
	    else {
    		$(objLink).attr('pressed', 'no');
    		emExceptions.addMany(arrInfo['exceptions']).throwAll(); //добавляем новые и выбрасываем исключения
    		$("#QuickRequest_kaptcha_change").click(); //меняем каптчу
    		$("#QuickRequest_kaptcha").val(""); //очищаем поле каптчи
    	}
    }
  });
  $(objLink).removeAttr("pressed");
  return false;
}



/*
  Обработка исключений
  objForm - объект формы (опционально)
*/
Exception_Multiline = function (objForm) {
  this.arrExceptions = [];
  if (objForm) this.jqForm = $(objForm);
  return this;
}
Exception_Multiline.prototype.arrExceptions = []; //здесь будут храниться исключения
Exception_Multiline.prototype.jqForm = null; //JQ объект формы
//сбрасываем объект исключений до исходного состояния (удаляем крестики и все исключения)
Exception_Multiline.prototype.reset = function () {
  this.arrExceptions = []; //удаляем уже выброшенные исключения
  if (this.jqForm) this.jqForm.find("img.errOrCor").remove();
}
//добавляем очередное исключение в массив
Exception_Multiline.prototype.add = function (data) {
  var objData = typeof(data) == "string" ? {text: data} : data; //
  this.arrExceptions.push(objData);
  return this;
}
//добавляем сразу несколько исключений
Exception_Multiline.prototype.addMany = function (objData) {
  var size = objData.length;
  if (!size) return;
  for (var i = size; i--;) {
    this.add(objData[i]);
  }
  return this;
}
//Добавить исключение и сразу выбросить
Exception_Multiline.prototype.throwOne = function (data) {
  var objData = typeof(data) == "string" ? {text: data} : data; //
  //если задана форма и при этом для данного элемента есть элемент для привязки
  if (this.jqForm && objData.selector && objData.selector.length) { 
    var html = "<a href='#' title='" + objData.text + "' onclick='alert($(this).attr('title'));return false;'>\
                  <img alt='' class='errOrCor' src='" + W_IMAGES + "icons/error.gif'>\
                </a>";
    $(objData.selector).append(html);
  } 
  else { //если форма не задана
    alert(" - " + objData.text)  ;
  }
  return this;
}
//Выбросить все добавленные исключения
Exception_Multiline.prototype.throwAll = function () {
  var size = this.arrExceptions.length;
  if (size) { //если исключения есть
    if (this.jqForm) { //если задана форма
        if (this.jqForm) this.jqForm.find("img.errOrCor").remove();
        for (var i = size; i--;) {
          if (this.arrExceptions[i].selector && this.arrExceptions[i].selector.length) {
            var html = "<a href='#' title='" + this.arrExceptions[i].text + "' onclick='alert($(this).attr(\"title\"));return false;'>\
                          <img alt='' class='errOrCor' src='" + W_IMAGES + "icons/error.gif'>\
                        </a>";
            $(html).insertAfter(this.arrExceptions[i].selector);
          } else alert(" - " + this.arrExceptions[i].text);
        }
    } 
    else { //если форма не задана
      alert(this.getPlain());
    }
    this.arrExceptions = []; //удаляем уже выброшенные исключения
  }
  return this;
}
//Проверяем, есть ли исключения
Exception_Multiline.prototype.exist = function () {
  return this.arrExceptions.length > 0;
}
//Возвращает оформленный для вывода список ошибок
// options.bullet (string) - элемент списка
// options.separator (string) - разделитель (\n, <br />)
Exception_Multiline.prototype.getPlain = function (options) {
  var settings = {bullet: " - ", separator: "\n"};
  jQuery.extend(settings, options);
  var size = this.arrExceptions.length;
  if (!size) return "";
  var arrExceptionsTexts = [];
  for (var i = size; i--;) {
    arrExceptionsTexts.push(this.arrExceptions[i].text);
  }
  return settings.bullet + arrExceptionsTexts.join(settings.separator + settings.bullet);
}
